﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FrbaCommerce.ABM_Rol
{
    public partial class frm_modificarRol : Form
    {
        private int selectedValueP;
        private string originalRolName;
        private bool nombreValido = true;

        public frm_modificarRol(string selectedText, string selectedValue)
        {
            InitializeComponent();
            originalRolName = selectedText;
            txt_nombreRol.Text = selectedText;
            selectedValueP = Convert.ToInt32(selectedValue);
        }

        private void frm_modificarRol_Load(object sender, EventArgs e)
        {
            this.cargarCombos();
            this.cargarCheckBox();                    
        }

        private void cargarCheckBox()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_ROL_HABILITADO";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_rol", selectedValueP);
            int rolInhabilitado = baseDeDatos.ejecuta(sqlCommand);
            if (rolInhabilitado == 1)
            {
                chk_habilitado.Enabled = true; 
            }
            else
            {
                chk_habilitado.Enabled = false;
            }
        }

        private void cargarCombos()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_POSIBLES_FUNCIONALIDADES_X_ROL";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_rol", selectedValueP);
            DataTable dt_funcionalidadAgregar = baseDeDatos.consulta(sqlCommand);
            cmb_agregarFuncionalidad.DataSource = dt_funcionalidadAgregar;
            cmb_agregarFuncionalidad.DisplayMember = "NOMBRE";
            cmb_agregarFuncionalidad.ValueMember = "ID_FUNCIONALIDAD";

            sqlCommand.Parameters.Clear();
            sqlCommand.CommandText = "LOS_GDDES.SP_TRAER_FUNCIONALIDADES_X_ROL";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_rol", selectedValueP);
            DataTable dt_funcionalidadEliminar = baseDeDatos.consulta(sqlCommand);
            cmb_quitarFuncionalidad.DataSource = dt_funcionalidadEliminar;
            cmb_quitarFuncionalidad.DisplayMember = "NOMBRE";
            cmb_quitarFuncionalidad.ValueMember = "ID_FUNCIONALIDAD";
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btn_agregar_Click(object sender, EventArgs e)
        {
            this.registrar_funcionalidad_rol();
            this.cargarCombos();
            this.actualizar_btn_agregar_eliminar();        
        }

        private void registrar_funcionalidad_rol()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_AGREGAR_FUNCIONALIDAD_ROL";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.Clear();
            sqlCommand.Parameters.AddWithValue("@id_rol", selectedValueP);
            sqlCommand.Parameters.AddWithValue("@id_funcionalidad", cmb_agregarFuncionalidad.SelectedValue);
            baseDeDatos.ejecuta(sqlCommand);         
        }

        private void btn_eliminar_Click(object sender, EventArgs e)
        {
            this.eliminar_funcionalidad_rol();
            this.cargarCombos();
            this.actualizar_btn_agregar_eliminar();
        }

        private void eliminar_funcionalidad_rol()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_ELIMINAR_FUNCIONALIDAD_ROL";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.Clear();
            sqlCommand.Parameters.AddWithValue("@id_rol", selectedValueP);
            sqlCommand.Parameters.AddWithValue("@id_funcionalidad", cmb_quitarFuncionalidad.SelectedValue);
            baseDeDatos.ejecuta(sqlCommand);        
        }

        private void actualizar_btn_agregar_eliminar()
        {
            if (cmb_agregarFuncionalidad.Items.Count == 0)
            {
                btn_agregar.Enabled = false;
            }
            else 
            {
                btn_agregar.Enabled = true;
            }
            if (cmb_quitarFuncionalidad.Items.Count == 0)
            {
                btn_quitar.Enabled = false;
            }
            else 
            {
                btn_quitar.Enabled = true;
            }
        }

        private void btn_guardar_Click(object sender, EventArgs e)
        {
            this.validar_nombreRol();

            if (nombreValido)
            {
                this.registrar_modificacion_rol();   
                this.Close();
            }
            else
                MessageBox.Show("Nombre de rol ya existe");
        }

        private void registrar_modificacion_rol()
        {
            if (originalRolName != txt_nombreRol.Text)
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "LOS_GDDES.SP_MODIFICAR_NOMBRE_ROL";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.Clear();
                sqlCommand.Parameters.AddWithValue("@id_rol", selectedValueP);
                sqlCommand.Parameters.AddWithValue("@nombre", txt_nombreRol.Text);
                baseDeDatos.ejecuta(sqlCommand);    
            }
            if (chk_habilitado.Enabled == true & chk_habilitado.Checked == true)
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();            
                sqlCommand.CommandText = "LOS_GDDES.SP_ALTA_ROL";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.Clear();
                sqlCommand.Parameters.AddWithValue("@id_rol", selectedValueP);              
                baseDeDatos.ejecuta(sqlCommand);
            }
        }
        
        private void txt_nombreRol_Leave(object sender, EventArgs e)
        {
            validar_nombreRol();
        }

        private void validar_nombreRol()
        {
            if (txt_nombreRol.Text == "")
            {
                txt_nombreRol.BackColor = Color.Red;
                nombreValido = false;
            }
            else if (originalRolName == txt_nombreRol.Text)
            {
                txt_nombreRol.BackColor = Color.White;
                nombreValido = true;
            }
            else
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "LOS_GDDES.SP_VALIDAR_ROL_NOMBRE";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.AddWithValue("@nombre", txt_nombreRol.Text);
                int nombreExistente = baseDeDatos.ejecuta(sqlCommand);

                if (nombreExistente > 0)
                {
                    txt_nombreRol.BackColor = Color.Red;
                    nombreValido = false;
                }
                else
                {
                    txt_nombreRol.BackColor = Color.White;
                    nombreValido = true;
                }
            }
        }
    }
}
